package cn.edu.zafu.bigdata.mahuilin;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

class GenericMaxFinder {

    // 泛型方法 findMax，需要一个Comparator<T>来比较T类型的对象
    public static <T> T findMax(List<T> list, Comparator<T> comparator) {
        if (list == null || list.isEmpty()) {
            throw new IllegalArgumentException("List must not be null or empty");
        }
        T max = list.get(0);
        for (T element : list) {
            if (comparator.compare(element, max) > 0) {
                max = element;
            }
        }
        return max;
    }

    public static void main(String[] args) {
        // 创建一个包含整数的列表
        List<Integer> intList = new ArrayList<>();
        intList.add(10);
        intList.add(20);
        intList.add(15);
        intList.add(30);

        // 创建一个包含字符串的列表
        List<String> stringList = new ArrayList<>();
        stringList.add("apple");
        stringList.add("banana");
        stringList.add("cherry");

        // 使用findMax方法查找最大值
        // 对于整数列表，使用自然顺序比较
        Integer maxInt = findMax(intList, Comparator.naturalOrder());
        // 对于字符串列表，使用字典序比较
        String maxString = findMax(stringList, Comparator.naturalOrder());

        // 输出结果
        System.out.println("Maximum integer: " + maxInt);
        System.out.println("Maximum string (lexicographically): " + maxString);
    }
}